iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

那些我還沒深入理解就開始使用的東西系列 第 11 篇

git reflog 如何找回消失的 commit 記錄?

  • 分享至 

  • xImage
  •  

Git 博大精深,最近工作一個不小心把還沒合併的 branch delete 掉了,直接 gg,好不容易做好的功能就這樣直接消失了,情急之下只能說服自己趕快再重做一次當作練習。
除了提醒自己下次仔細檢查在把 branch 刪掉之外,還有沒有其他可以解決這件事情呢?我找到的答案是 git reflog。

1. branch 的本質是什麼?

分支只是一個指向某個 Commit 的「指標」,刪除這個指標並不會造成那些 Commit 消失。

既然刪除 branch 只是讓指標消失,commit 還在,那要怎麼把 commit 找回來呢?

2. 什麼是 HEAD ?

HEAD 也是一個「指標」,指向某一個分支,通常可以把 HEAD 當做「目前所在分支」看待,而分支會隨著 commit 做移動。什麼意思,意思是說當 Git 往前推進一個 Commit 的時候,它所在的分支也會跟著往前移動。

3. git reflog

reflog 的意思刷新日誌

當 Head 移動的時候(切換分支、commit...) Git 就會在 Reflog 上做紀錄,所以只要在 Terminal 上輸入 git reflog 就可以看到之前 commit 的記錄,如果平常 commit message 寫的仔細的話,透過搜尋,很快的就可以找到 commit 對應的 SHA 值。

4. cherry pick ?

取得 SHA 值,剩下的就簡單了,cherry pick 的功能是將 commit 撿起來做合併,所以我們只要在開發的 branch 上新開一個分支,使用 cherry pick [SHA] 就可以把不小心刪掉的 commit 撿回來了,找回失去的記憶就是這麼簡單~

參考資料

【狀況題】不小心把還沒合併的分支砍掉了,救得回來嗎?
【冷知識】HEAD 是什麼東西?
【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?
【狀況題】如果你只想要某個分支的某幾個 Commit?

延伸閱讀

【冷知識】標籤跟分支有什麼不一樣?


上一篇
FP Functional Programing
下一篇
RegExp
系列文
那些我還沒深入理解就開始使用的東西 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言